\documentclass[a4paper,10pt]{article}
\usepackage[top=1.5cm, bottom=1.5cm, left=2cm, right=2cm]{geometry}

\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} % Use 8-bit encoding that has 256 glyphs
\usepackage{microtype} % Slightly tweak font spacing for aesthetics

\usepackage{hyperref} % For hyperlinks in the PDF
\hypersetup{
  bookmarks=true,         % show bookmarks bar?
  unicode=false,          % non-Latin characters in Acrobat’s bookmarks
  pdfnewwindow=true,      % links in new window
  colorlinks=true,       % false: boxed links; true: colored links
  linkcolor=black,        % color of internal links (change box color with linkbordercolor)
  citecolor=magenta,        % color of links to bibliography
  filecolor=magenta,      % color of file links
  urlcolor=[rgb]{0,0,0.5}           % color of external links
}

\usepackage{multicol}
\usepackage{array}
\usepackage{lastpage}

\usepackage{fancyhdr} % Headers and footers
\pagestyle{fancy} % All pages have headers and footers
\fancyhead{} % Blank out the default header
\fancyfoot{} % Blank out the default footer
\fancyfoot[R]{\thepage/\pageref{LastPage}} % Custom footer text
\renewcommand{\headrulewidth}{0pt}

\setlength{\parindent}{0cm}
\usepackage{listings}
\usepackage{ragged2e}
\usepackage{pdfpages}
\usepackage{graphicx}
\graphicspath{ {./img/} }

\usepackage{minted} % coloration syntaxique

\usepackage{listingsutf8}
\lstdefinestyle{ShellStyle}{
  language=bash,
  breaklines=true,
  basicstyle=\footnotesize\ttfamily\color{black},
  % numbers=left,
  % numberstyle=\small,
  % numbersep=3pt,
  frame=tb,
  % columns=fullflexible,
  backgroundcolor=\color{yellow!20},
  linewidth=0.95\linewidth,
  xleftmargin=0.05\linewidth
}

\setcounter{tocdepth}{4}
%----------------------------------------------------------------------------------------
\let\olditemize\itemize
\renewcommand{\itemize}{
    \olditemize
\setlength{\itemsep}{0pt}
    \setlength{\parskip}{0pt}
    \setlength{\parsep}{0pt}
}
\renewcommand{\labelitemi}{$-$}
\renewcommand{\labelitemii}{$\ast$}

\begin{document}

\noindent
\begin{minipage}[t]{.45\textwidth}
    \raggedright
    Université de Provence\\
    Master 2 ISIC
\end{minipage}
\hfill
\noindent
\begin{minipage}[t]{.45\textwidth}
    \raggedleft
    Vendredi 20 Mars 2009
\end{minipage}
\vspace{1cm}

\centering
\huge{\textsc\textbf{Introduction au C++ de 2009}}\\[1mm]
\noindent\hrulefill\\
\normalsize
\textit{Examen année 2008-2009}\\[3mm]
\justify
Durée: 1h00, Documents non autorisés\\
Calculatrices non autorisées

\noindent\hrulefill

\thispagestyle{fancy} % All pages have headers and footers

\large{\textsc{Lisez bien tout l'énoncé avant de commencer!}}
\normalsize

\section*{Fonctionnement de la filière instrumentation}
\addcontentsline{toc}{section}{Fonctionnement de la filière instrumentation}

Imaginons que l'on veuille écrire un programme de gestion globale de la filière instrumentation. Ce programme s'occuperait à la fois des étudiants et du personnel. Pour cela, un programme en C++ a été écrit, ce programme permettant de gérer à la fois les personnels et les étudiants. Le nombre de paramètres intervenant pour cette gestion étant assez important, nous allons nous limiter à un nombre réduit de facteurs, à savoir :
\begin{itemize}
    \item pour les étudiants : le nom, l'adresse et la moyenne
    \item pour les personnels : le nom, l'adresse, un numéro de casier et le salaire
\end{itemize}
Dans cet exercice, vous allez avoir à regarder comment un tel problème peut être résolu via une ``approche objet''. Dans la suite, les questions vont porter sur l'analyse du code source fourni en annexe afin de voir quels sont les objets qui ont été définis et quels sont les liens de parentés existants. Vous pouvez vous concentrer principalement sur les blocs de déclaration pour répondre aux questions.

\section*{Analyse du programme ($\approx$ 12 pts)}
\addcontentsline{toc}{section}{Analyse du programme}

\begin{enumerate}
    \item Identifiez le nombre de classes présentes dans le programme et donnez les noms associés.
    \item Pour chaque classe trouvée en partiel 1, indiquez
        \begin{enumerate}
        \item Quelles sont les données membres ? donnez leurs noms et leurs types.
        \item Quels constructeurs ont été définis à chaque fois ? précisez pour chacun le type de paramètres ainsi que les \textit{noms usuels} (constructeur par défaut, par copie \ldots{}).
        \item Quelles sont les fonctions membres ? précisez le nom, le type de données renvoyées et quels sont les paramètres (nom et type).\\
            \underline{\textbf{Remarque 1 :}} Il n'est pas demandé d'indiquer le rôle exact de chaque fonction identifiée dans cette partie.\\
            \underline{\textbf{Remarque 2 :}} Lorsqu'un type de donnée est demandé, indiquez si la variable associée est une \textit{contante nommée} rapportera des points supplémentaires en cas de réponse juste.
        \item \underline{\textit{Question supplémentaire bonus :}} Donnez un exemple de déclaration de variable utilisant chacun des constructeurs identifiés.
        \end{enumerate}
\end{enumerate}

\section*{Hiérarchie et Analyse des dépendances ($\approx$ 12 points)}
\addcontentsline{toc}{section}{Hiérarchie et Analyse des dépendances}

\begin{enumerate}
    \item \underline{Diagramme d'héritage}\\
        Réaliser un diagramme représentant les liens de parantés existants entre les différentes classes.\\
        Chaque classe sera écrite dans un rectangle divisé en 2 sections.
        \begin{itemize}
            \item le nom de la classe dans la section du haut.
            \item chaque fonction membre de la classe sera écrite dans la section du bas précédée d'un :
                \begin{itemize}
                    \item $+$ s'il s'agit d'un membre public
                    \item $-$ s'il s'agit d'un membre privé
                    \item $\#$ s'il s'agit d'un membre protégé
                \end{itemize}
        \end{itemize}

    \item \underline{Polymorphisme}\\
        En vous servant des réponses que vous avez trouvées en partie B et C, indiquez, pour chaque classe quelle(s) fonction(s) définie(s) dans les autres classes peuvent être utilisées. Vous pouvez répondre sous forme d'un tableau à 2 entrées avec le nom de la classe pour les colonnes et le nom de des fonctions pour les lignes. Vous indiquerez alors si la fonction est :
        \begin{itemize}
            \item définie dans cette classe via la lettre \texttt{D}
            \item utilisable directement en indiquant un \texttt{U}
            \item surchargée pour cette classe via la lettre \texttt{S}
            \item redéfinie dans cette classe via la lettre \texttt{R}
            \item inaccessible via la lettre \texttt{I}
        \end{itemize}
\end{enumerate}

\begin{center}
    \begin{tabular}{|c|c|c|c|c|}
        \hline
        & classe ??? & classe ??? & \ldots{} & classe ???\\
        \hline
        fonction ??? & \texttt{D} & \texttt{I} & \ldots{} & \texttt{U} \\
        \hline
        $\vdots$ & & & & \\
        \hline
        fonction ??? & \texttt{R} & \texttt{R} & \ldots{} & \texttt{S} \\
        \hline
    \end{tabular}
\end{center}

\section*{La question difficile ($\approx$ 3 points)}
\addcontentsline{toc}{section}{La question difficile}

\underline{Interessez vous à cette question UNIQUEMENT si vous avez tout fini et qu'il vous reste du temps.}\\
Supposons que nous écrivions la fonction \texttt{main} suivante :
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/main.cpp}

\section*{Annexes : Code source pour simuler le fonctionnement de la filière}
\addcontentsline{toc}{section}{Annexes : Code source pour simuler le fonctionnement de la filière}

\subsection*{Classe \texttt{Personne}}
\addcontentsline{toc}{subsection}{Classe \texttt{Personne}}

\subsubsection*{Personne.hpp}
\addcontentsline{toc}{subsubsection}{Personne.hpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Personne.hpp}

\pagebreak

\subsubsection*{Personne.cpp}
\addcontentsline{toc}{subsubsection}{Personne.cpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Personne.cpp}

\pagebreak

\subsection*{Classe \texttt{Personnel}}
\addcontentsline{toc}{subsection}{Classe \texttt{Personnel}}

\subsubsection*{Personnel.hpp}
\addcontentsline{toc}{subsubsection}{Personnel.hpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Personnel.hpp}

\subsubsection*{Personnel.cpp}
\addcontentsline{toc}{subsubsection}{Personnel.cpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Personnel.cpp}

\pagebreak

\subsection*{Classe \texttt{Etudiant}}
\addcontentsline{toc}{subsection}{Classe \texttt{Etudiant}}

\subsubsection*{Etudiant.hpp}
\addcontentsline{toc}{subsubsection}{Etudiant.hpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Etudiant.hpp}

\subsubsection*{Etudiant.cpp}
\addcontentsline{toc}{subsubsection}{Etudiant.cpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Etudiant.cpp}

\pagebreak

\subsection*{Classe \texttt{Enseignant}}
\addcontentsline{toc}{subsection}{Classe \texttt{Enseignant}}

\subsubsection*{Enseignant.hpp}
\addcontentsline{toc}{subsubsection}{Enseignant.hpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Enseignant.hpp}

\subsubsection*{Enseignant.cpp}
\addcontentsline{toc}{subsubsection}{Enseignant.cpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Enseignant.cpp}

\pagebreak

\subsection*{Classe \texttt{Administratif}}
\addcontentsline{toc}{subsection}{Classe \texttt{Administratif}}

\subsubsection*{Administratif.hpp}
\addcontentsline{toc}{subsubsection}{Administratif.hpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Administratif.hpp}

\subsubsection*{Administratif.cpp}
\addcontentsline{toc}{subsubsection}{Administratif.cpp}
\inputminted[linenos=true,frame=single,fontsize=\scriptsize]{c++}{../src/Administratif.cpp}

\end{document}
